home *** CD-ROM | disk | FTP | other *** search
- #ifndef __amigaos__
- #include "ndelay.h"
- #include "open.h"
- #else
- #include <exec/types.h>
- #include <exec/tasks.h>
- #include <dos/dos.h>
- #include <dos/dosextens.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <string.h>
- #include <signal.h>
- #endif /* __amigaos__ */
- #include "triggerpull.h"
-
- void triggerpull()
- {
- #ifndef __amigaos__
- int fd;
-
- fd = open_write("lock/trigger");
- if (fd >= 0)
- {
- ndelay_on(fd);
- write(fd,"",1); /* if it fails, bummer */
- close(fd);
- }
- #else /* __amigaos__ */
- /* This is the ugly part. */
- ULONG maxCLI, i;
- struct Process *proc;
- struct CommandLineInterface *cli;
- UBYTE *cmdName;
- int omask;
-
- /* Disable Un*x signals. */
- omask = sigsetmask (~0);
- /* Forbid preemptive task switching. :-( */
- Forbid ();
- maxCLI = MaxCli ();
- /* Send a Ctrl-D signal to all processes named "qmail-send". */
- for (i = 1UL; i <= maxCLI; i++)
- if ((proc = FindCliProc (i)))
- if ((cli = BADDR (proc->pr_CLI)))
- if ((cmdName = BADDR (cli->cli_CommandName)))
- if (cmdName[0] > 0 && 0 == strncmp ("qmail-send", &cmdName[1], cmdName[0]))
- {
- Signal ((struct Task *) proc, SIGBREAKF_CTRL_D);
- }
-
- Permit ();
- sigsetmask (omask);
- #endif /* __amigaos__ */
- }
-